15
תגובות
יש לי 2 טבלאות במסד הנתונים.
לצורך העניין אקרא להן tableA ו-tableB.
בטבלה tableA יש את השדות ID, name ו- image.
בטבלה tableB יש לי ID ו-deleted_img.

מה שבעצם אני רוצה לעשות זה לבחור מטבלה tableA את כל התמונות (image) וגם לבחור מטבלה tableB את כל התמונות (deleted_img) שאינן זהות לתמונות אחרות (בשם שלהן).
מקווה שעד לפה מובן (?)
אוקיי. ואת שאר התמונות (שבחרתי מהטבלה tableB והן אינן זהות לשמות של תמונות אחרות ב-tableA ) , אני גם רוצה להציג.

המטרה שלי היא להציג את כל התמונות שהועלו (או נמחקו מה-DB אך לא מהשרת FTP) ללא כפילויות.

15 תשובות

avatar ענה dinamit ב 31 ליולי 2012 #

ניסיתי להשתמש ב-MINUS אבל משום מה זה לא עובד ומחזיר שגיאה.
ניסיתי גם:

$sql = mysql_query("
  SELECT tableA.image, tableB.deleted_img
  FROM tableA, tableB
  LEFT OUTER JOIN tableB
  ON tableA.image = tableB.deleted_img
  WHERE tableB.deleted_img is null
  ORDER by image"
) or die (mysql_error());


אל לצערי גם זה לא עובד בדיוק כמו שצריך...

avatar ענה iiddaannyy ב 31 ליולי 2012 #

לא כל כך הצלחתי להבין את ההסבר שלך. תן דוגמה לתוכן של הטבלאות ולמה שהשליפה אמורה להוציא.

avatar ענה dinamit ב 31 ליולי 2012 #

אוקיי.
2 הטבלאות הנ"ל הן: products ו-deleted_images.
יש לי בטבלה products כמה שדות: prod_id, name, image.
ואילו בטבלה deleted_images יש ID ו- deleted_img.

יש לי להוספת מוצרים, כך שאפשר גם , כמו שאתה יכול להבין, להעלאות תמונה ל-DB (בתור שֵם של הקובץ כמובן) + העלאת התמונה לשרת FTP.
אם אני מוחק מוצר מהטבלה products ולא מוחק את התמונה עצמה מה-FTP אז זה מכניס באופן אוטומטי שורה חדשה לטבלה deleted_images, כך שבשדה deleted_img בטבלה הזו יהיה שם התמונה של המוצר הנ"ל שהרגע נמחק.

ה-המטרה של כל העניין: לעשות דף חדש שבו יהיו מוצגות כל התמונות שהועלו אי פעם אשר נמצאות כעת על השרת ללא כפילויות.

[כשאני מדבר על כפילויות, הכוונה היא שאם למשל העלאתי תמונה (ששמה יהיה לצורך העניין - test.jpg) למוצר מסוים ואז מחקתי את המוצר ( הרי שהקובץ נשאר על השרת) והתמונה test.jpg כבר מקושרת לקובץ מסוים בטבלה products אז תיווצר כפילות- היות והתמונה נמצאת ב-2 הטבלאות אז יראו אותה בדף החדש פעמיים - פעם אחת כשהיא מהטבלה products ופעם אחת כשהיא מהטבלה deleted_images ].

מקווה שהייתי ברור....תודה. =]

avatar ענה raslin ב 31 ליולי 2012 #

למה לא לעשות בטבלה הראשונה תא נוסף בשם is_deleted?
זה טוב יותר מכל בחינה

avatar ענה dinamit ב 31 ליולי 2012 #

אבל אם אני עושה תא כזה (is_deleted) אז בעצם לא עשיתי כלום. הרי אחרי הכל אני רוצה למחוק את השורה ( המוצר ) הזה מהטבלה. וה-is_deleted יוכל מקסימום להפוך אותה ללא פעילה.

avatar ענה raslin ב 31 ליולי 2012 #

אז כנראה לא הבנתי מה אתה רוצה לעשות..

avatar ענה dinamit ב 31 ליולי 2012 #

קראת את התגובה ה-3 שכתבתי?
בטוח תבין....

avatar ענה iiddaannyy ב 31 ליולי 2012 #

אם הבנתי נכון, אז אתה מדבר על union:

(
    SELECT `image`
    FROM `products`
) UNION (
    SELECT `deleted_img`
    FROM `deleted_images`
)

אתה יכול למחוק את הסוגריים ואת הרווחים כמובן. פשוט אני כותב כך מתוך הרגל (כשעושים union לשאילתות גדולות זה עוזר).

avatar ענה intval ב 01 לאוגוסט 2012 #

למה שפשוט לא תעבור על כל התיקיה ותציג את שמות הקבצים שנמצאים שם ?

avatar ענה dinamit ב 01 לאוגוסט 2012 #

זה בדיוק מה שרציתי לעשות מהתחלה.
אבל יש קבצים שאני לא רוצה להציג כדוגמת: index.html או .htaccess
אולי יש לזה פתרון?

avatar ענה intval ב 01 לאוגוסט 2012 #

תעשה רשימה של קבצים בקוד שאתה לא רוצה להציג
או יותר טוב - פשוט תוציא מהתיקיה רק שמות של קבצים שנגמרים בסיומת של תמונות.

avatar ענה dinamit ב 01 לאוגוסט 2012 #

תודה רבה אלכס!
השתמשתי בפונקציה GLOB.

avatar ענה cthulhu ב 01 לאוגוסט 2012 #

יש את DirectoryIterator במקום glob.

avatar ענה dinamit ב 01 לאוגוסט 2012 #

איך אני משתמש ב- DirectoryIterator?

avatar ענה dinamit ב 01 לאוגוסט 2012 #

תודה רבה למסייעים במלאכה.
הסתדרתי.